package com.zed.api.domain;

/**
 * {@link Activable}, 实现该接口的实例，具备激活和钝化的能力
 *
 * @author Zed
 */
public interface Activable {

    /**
     * 是否激活(生效)
     *
     * @return {@link boolean},返回<code>true</code>表示激活，返回<code>false</code>表示未激活
     */
    boolean actived();

    /**
     * 判断<code>target</code>是否激活<br>
     * 如果target支持{@link Activable},则通过{@link #actived()}判断目标对象的激活情况<br>
     * 否则默认返回<code>true</code>
     *
     * @param target {@link T},如果target为null,则返回false.
     * @return {@link boolean}
     */
    static <T> boolean isActived(T target) {
        if (target == null) return false;

        if (target instanceof Activable) {
            return ((Activable) target).actived();
        }

        return true;
    }
}

